/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pck_com.pck_rrhh.pck_webservices;

import com.tramitedocu.pojos.Cls_Unidad_Organizativa;
import java.util.ArrayList;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import pck_com.pck_rrhh.pck_src.pck_pojos.Cls_xml_data;
import pck_com.pck_rrhh.pck_src.pck_services.TablasService;
import pck_com.pck_rrhh.pck_src.pck_services.UnidadOrganizativaService;
import pck_com.pck_rrhh.pck_utiles.Cls_Funciones;
import pck_com.pck_rrhh.pck_utiles.Cls_Parametros;

/**
 *
 * @author mx
 */
@Component
@Path("/UnidadOrganica/{tipo_operacion}/{parametro}")
public class UnidadOrganicaWS {

    @Autowired//Me Permite Injectar la Dependencia de Spring
    UnidadOrganizativaService unidadOrganizativaService;
    @Autowired//Me Permite Injectar la Dependencia de Spring
    TablasService tablasService;

    @GET
    @Produces(MediaType.APPLICATION_XML)
    public Object generarWebService(@PathParam("tipo_operacion") String tipo_consulta,
            @PathParam("parametro") String param) {
        try {
            switch (new Integer(tipo_consulta)) {
                case Cls_Parametros.Unidad_CANTIDAD_UNIDADES:
                    return obtenerCantidadUnidadesOrganicas(param);
                case Cls_Parametros.Unidad_OBTENER_UNIDADES_TODAS:
                    return obtenerTodasUnidadesOrganicas(param);
                case Cls_Parametros.Unidad_CANTIDAD_UNIDADES_ORGANICAS_GENERALES:
                    return obtenerCantidadUnidadesOrganicasGenerales(param);
                case Cls_Parametros.Unidad_OBTENER_UNIDADES_ORGANICAS_GENERALES:
                    return obtenerTodasUnidadesOrganicasGenerales(param);
                case Cls_Parametros.Unidad_OBTENER_UNIDAD_ORGANICA:
                    return obtenerUnidadOrganica(param);
                case Cls_Parametros.Tablas_OBTENER_UNIDAD_CON_RESPONSABLE:
                    return obtenerUnidadConResponsable(param);
                case Cls_Parametros.Tablas_INSERTAR_JEFE_AREA:
                    return insertaJefeArea(param);
                case Cls_Parametros.Tablas_OBTENER_POSIBILIDAD_ENVIO:
                    return obtenerPosibilidadEnvio(param);
                case Cls_Parametros.Tablas_OBTENER_POSIBILIDAD_PROYECCION:
                    return obtenerPosibilidadProyeccion(param);
                case Cls_Parametros.Tablas_OBTENER_POSIBILIDAD_VISTO_BUENO:
                    return obtenerPosibilidadVistoBueno(param);
                default:
                    return "";
            }
        } catch (NumberFormatException ex) {
            return null;
        } catch (ArrayIndexOutOfBoundsException ex) {
            return null;
        }
    }

    private Cls_xml_data insertaJefeArea(String parametro) {
        String datos_recibidos[] = parametro.split("-");
        if (datos_recibidos.length != 5) {
            return null;
        }
        Cls_Unidad_Organizativa unidad = new Cls_Unidad_Organizativa(datos_recibidos[0], datos_recibidos[3], datos_recibidos[4]);
        String retorno = unidadOrganizativaService.agregarJefeaArea(unidad);
        String parametrosParaService_01[] = {Cls_Parametros.Map_CODIGO_UNIDAD_ORGANICA, datos_recibidos[0]};
        String parametrosParaService_02[] = {Cls_Parametros.Map_CORREO, datos_recibidos[1]};
        String parametrosParaService_03[] = {Cls_Parametros.Map_CODIGO_DIRECTIVA, datos_recibidos[2]};
        retorno = tablasService.actualizarUnidadOrganizativa(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01, parametrosParaService_02, parametrosParaService_03));
        return new Cls_xml_data(retorno == null ? Cls_Parametros.Mensajes_ERROR_CONEXION : retorno);
    }

    private Cls_xml_data obtenerCantidadUnidadesOrganicas(String parametro) {
        String datos_recibidos[] = parametro.split("-");
        String parametrosParaService_01[] = {Cls_Parametros.Map_FILTRO_NOMBRE, "%" + datos_recibidos[0] + "%"};
        String retorno = unidadOrganizativaService.obtenerCantidadUnidadesOrganicas(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01));
        return new Cls_xml_data(retorno == null ? Cls_Parametros.Mensajes_ERROR_CONEXION : retorno);
    }

    private Cls_xml_data obtenerCantidadUnidadesOrganicasGenerales(String parametro) {
        String datos_recibidos[] = parametro.split("-");
        String parametrosParaService_01[] = {Cls_Parametros.Map_FILTRO_NOMBRE, "%" + datos_recibidos[0] + "%"};
        String retorno = unidadOrganizativaService.obtenerCantidadUnidadesOrganicasGenerales(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01));
        return new Cls_xml_data(retorno == null ? Cls_Parametros.Mensajes_ERROR_CONEXION : retorno);
    }

    private Cls_xml_data obtenerTodasUnidadesOrganicas(String parametro) {
        String datos_recibidos[] = parametro.split("-");
        String parametrosParaService_01[] = {Cls_Parametros.Map_FILTRO_NOMBRE, "%" + datos_recibidos[0] + "%"};
        String parametrosParaService_02[] = {Cls_Parametros.Map_PAGE, datos_recibidos[1]};
        String parametrosParaService_03[] = {Cls_Parametros.Map_PAGE_TAMANIO, datos_recibidos[2]};
        Cls_xml_data xml_data = new Cls_xml_data();
        xml_data.setArray_unidad(unidadOrganizativaService.obtenerUnidadesOrganicas(Cls_Funciones.generarHashMapParaSolicitud(
                parametrosParaService_01, parametrosParaService_02, parametrosParaService_03)));
        return xml_data;
    }

    private Cls_xml_data obtenerTodasUnidadesOrganicasGenerales(String parametro) {
        String datos_recibidos[] = parametro.split("-");
        String parametrosParaService_01[] = {Cls_Parametros.Map_FILTRO_NOMBRE, "%" + datos_recibidos[0] + "%"};
        String parametrosParaService_02[] = {Cls_Parametros.Map_PAGE, datos_recibidos[1]};
        String parametrosParaService_03[] = {Cls_Parametros.Map_PAGE_TAMANIO, datos_recibidos[2]};
        Cls_xml_data xml_data = new Cls_xml_data();
        xml_data.setArray_unidad(unidadOrganizativaService.obtenerTodasUnidadesOrganicasGenerales(Cls_Funciones.generarHashMapParaSolicitud(
                parametrosParaService_01, parametrosParaService_02, parametrosParaService_03)));
        return xml_data;
    }

    private Cls_xml_data obtenerUnidadOrganica(String parametro) {
        String parametrosParaService_01[] = {Cls_Parametros.Map_FILTRO_NOMBRE, "%%"};
        String parametrosParaService_02[] = {Cls_Parametros.Map_PAGE, "1"};
        String parametrosParaService_03[] = {Cls_Parametros.Map_PAGE_TAMANIO, unidadOrganizativaService.obtenerCantidadUnidadesOrganicasGenerales(
            Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01))};
        ArrayList<Cls_Unidad_Organizativa> xml_data = unidadOrganizativaService.obtenerTodasUnidadesOrganicasGenerales(Cls_Funciones.generarHashMapParaSolicitud(
                parametrosParaService_01, parametrosParaService_02, parametrosParaService_03));
        for (Cls_Unidad_Organizativa unidades : xml_data) {
            if (parametro.compareTo(unidades.getCodigo_area()) == 0) {
                return new Cls_xml_data(unidades);
            }
        }
        return null;
    }

    private Cls_xml_data obtenerUnidadConResponsable(String parametro) {
        String parametrosParaService_01[] = {Cls_Parametros.Map_CODIGO_UNIDAD_ORGANICA, parametro};
        return new Cls_xml_data(unidadOrganizativaService.obtenerUnidadConResponsable(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01)));
    }

    private Cls_xml_data obtenerPosibilidadEnvio(String parametro) {
        Cls_xml_data data = new Cls_xml_data();
        data.setArray_posibilidad(unidadOrganizativaService.obtenerPosibilidadEnvio(
                Cls_Funciones.generarHashMapParaSolicitud(new String[]
                {Cls_Parametros.Map_CODIGO_UNIDAD_ORGANICA, parametro})));
        return data;
    }

    private Cls_xml_data obtenerPosibilidadProyeccion(String parametro) {
        Cls_xml_data data = new Cls_xml_data();
        data.setArray_posibilidad(unidadOrganizativaService.obtenerPosibilidadProyeccion(
                Cls_Funciones.generarHashMapParaSolicitud(new String[]
                {Cls_Parametros.Map_CODIGO_UNIDAD_ORGANICA, parametro})));
        return data;
    }

    private Cls_xml_data obtenerPosibilidadVistoBueno(String parametro) {
        Cls_xml_data data = new Cls_xml_data();
        data.setArray_posibilidad(unidadOrganizativaService.obtenerPosibilidadVistoBueno(
                Cls_Funciones.generarHashMapParaSolicitud(new String[]
                {Cls_Parametros.Map_CODIGO_UNIDAD_ORGANICA, parametro})));
        return data;
    }
}
